package structureDonnee;

import java.util.LinkedList;

import verificateur.EnsembleVariable;


public class Invariant {
	//invariant = "{inequalite1,inequalite2,...,inequalite(n)}"
	//invariant est une liste de inequalite, il a un champ LinkedList<Inequalite> listIne;
	//invariant commence par "{", termine par "}", ses inegalites se separent par ","
	public LinkedList<Inequalite> listIne;
	
	public Invariant(){
		listIne = new LinkedList<Inequalite>();
	}
	public Invariant(LinkedList<Inequalite> inq){
		listIne = new LinkedList<Inequalite>();
		listIne.addAll(inq);
	}
	public Invariant(Invariant inv){
		listIne = new LinkedList<Inequalite>();
		listIne.addAll(inv.listIne);
	}	
	//construie Invariant depuis un String, sous condition de connaitre EnsembleVariable
	public Invariant(String s,EnsembleVariable ev){//String s = "{inegalite1,inegalite2,...,inegalite n}"
		String ms = s;
		int i=0; 
		int carLu=s.charAt(i);

		StringBuffer buffer = new StringBuffer();
		listIne = new LinkedList<Inequalite>();
		do{
			buffer.delete(0,buffer.length());i++;carLu = s.charAt(i);
			do{buffer.append((char)carLu);	i++; carLu = s.charAt(i);}while(",}".indexOf(carLu)==-1);
			ms = buffer.toString();
			Inequalite tmp = new Inequalite(ms,ev);
			listIne.add(tmp);
		}while(carLu!='}');
	}

	public LinkedList<Inequalite> getListIne(){
		return listIne;
	}
	//afficher un Invariant
	public void publish(EnsembleVariable ev){
		int l = listIne.size();
		System.out.print("INV-");
		if(listIne.isEmpty()) System.out.println("ce invariant is empty.");
		else{
			for(int j = 0 ; j< l ;j++){
				listIne.get(j).pulish(ev);
			}
			System.out.println();
		}
	}
}
